//
// Created by LiuYou on 2021/5/23.
//

#include <cstdlib>
#include <unistd.h>
#include <csignal>

static void interruptHandler(int i);

int main() {
//    std::signal(SIGINT, SIG_IGN);
// 第二个参数是: SIG_IGN/SIG_DFL/用户自定义的信号处理函数的入口地址
    // TODO 注意: signal()并不是在执行到就直接调用了。
    //  它是在程序未结束的情况下, 如果程序收到了SIGINT信号的话, 那么就来执行interruptHandler这个函数。

    // TODO 注意: 什么时候执行这个interruptHandler函数。
    //  1. 程序没结束
    //  2. 信号来了才执行
    // 可以这么说signal函数有对信号进行注册这个功能。
    signal(SIGINT, interruptHandler);
    // 当前做的是当 SIGINT 信号来了之后执行 interruptHandler函数的行为(内容)。
    // SIGINT信号是有默认的处理方式——终止当前进程。

    // TODO 注意: 信号会打断阻塞的系统调用(例如本例中的write()函数)。
    //  具体可看 SignalTest02.cpp(这个文件是MyCopy.cpp的内容)。


    for (int i = 0; i < 10; ++i) {
        write(1, "*", 1);
        sleep(1);
    }

    std::exit(0);
}

static void interruptHandler(int i) {
    write(1, "!", 1);
}
